Java Deklaracje i prawa dost pu Piotr Fulma«ski Wydziaˆ Matematyki i Informatyki, Uniwersytet Šódzki, Polska December 4, 2010
Spis tre±ci 1 Java krótka charakterystyka 2 Deklaracje Nazwy Deklarowanie klas Deklarowanie interfejsów Deklarowanie skªadowych klasy Modykatory dost pu Inne modykatory Konstruktor Zmienne Typ wyliczeniowy (enum)
Java krótka charakterystyka Mo»na powiedzie, i» ka»dy program napisany w Javie jest zbiorem pewnych obiektów (ang. objects). Komunikacja mi dzy obiektami zazwyczaj odbywa si za po±rednictwem metod (ang. methods). To czym jest obiekt (jakiego jest rodzaju, typu, co potra) deniowane jest przez klas (ang. class) lub interfejs (ang. interface). Mówi c troch bardziej precyzyjnie
Java krótka charakterystyka Obiekt, klasa,... Klasa Jest to pewnego rodzaju wzorzec opisuj cy (deniuj cy) stany jakie mo»e przyj ka»dy obiekt utworzony w oparciu o dan klas a tak»e zachowania (czynno±ci, akcje) jakie s dla niego charakterystyczne (czynno±ci jakie mo»e wykona, akcj jakie mo»na zleci jemu do wykonania). Obiekt Stan Zachowanie
Java krótka charakterystyka Obiekt, klasa,... Klasa Jest to pewnego rodzaju wzorzec opisuj cy (deniuj cy) stany jakie mo»e przyj ka»dy obiekt utworzony w oparciu o dan klas a tak»e zachowania (czynno±ci, akcje) jakie s dla niego charakterystyczne (czynno±ci jakie mo»e wykona, akcj jakie mo»na zleci jemu do wykonania). Obiekt Stan Zachowanie
Java krótka charakterystyka Obiekt, klasa,... Klasa Jest to pewnego rodzaju wzorzec opisuj cy (deniuj cy) stany jakie mo»e przyj ka»dy obiekt utworzony w oparciu o dan klas a tak»e zachowania (czynno±ci, akcje) jakie s dla niego charakterystyczne (czynno±ci jakie mo»e wykona, akcj jakie mo»na zleci jemu do wykonania). Obiekt Stan Zachowanie
Java krótka charakterystyka Obiekt, klasa,... Klasa Jest to pewnego rodzaju wzorzec opisuj cy (deniuj cy) stany jakie mo»e przyj ka»dy obiekt utworzony w oparciu o dan klas a tak»e zachowania (czynno±ci, akcje) jakie s dla niego charakterystyczne (czynno±ci jakie mo»e wykona, akcj jakie mo»na zleci jemu do wykonania). Obiekt Stan Zachowanie
Java krótka charakterystyka Obiekt, klasa,... Klasa Jest to pewnego rodzaju wzorzec opisuj cy (deniuj cy) stany jakie mo»e przyj ka»dy obiekt utworzony w oparciu o dan klas a tak»e zachowania (czynno±ci, akcje) jakie s dla niego charakterystyczne (czynno±ci jakie mo»e wykona, akcj jakie mo»na zleci jemu do wykonania). Obiekt Stan Zachowanie
Dziedziczenie Java krótka charakterystyka
Pakiet jako zbiór klas Java krótka charakterystyka
Java krótka charakterystyka Nazwy i sªowa kluczowe Zwykle zagadnienie nazewnictwa stosowanego w Javie bywa marginalizowane przecie» to tylko nazwy. Z nazwami jest jednak tak jak z wymow przyjemniej rozmawia si nam z kim± o dobrej dykcji ni» osob mamrocz c co± niewyra¹nie pod nosem. Dodatkowo niewyra¹na wymowa bywa cz sto ¹ródªem pomyªek i przyczyn braku wzajemnego zrozumienia. Tak samo dzieje si te» w programowaniu. Dlatego postanowili±my po±wi ci nazwom osobny podrozdziaª w dalszej cz ±ci podr cznika (patrz
Nazwy Nazwy Mówi c o nazwach, pam ta musimy,»e podlegaj one (jednocze±nie) trzem konwencjom nazewniczym.
Nazwy Identykatory poprawne skªadniowo Identykatory poprawne skªadniowo Bez wzgl du na to jak nazw (identykator)sobie wymy±limy, czy stosujemy si do wªasnej konwencji czy narzuconej np. przez rm, w której pracujemy, musi ona by poprawna skªadniowo, czyli by zbudowana zgodnie z zasadami wedªug jakich kompilator b dzie j w przyszªo±ci sprawdzaª.
Nazwy Identykatory poprawne skªadniowo Identykatory poprawne skªadniowo Dopuszczalne znaki Istotna wielko± liter Pierwszy znak Dªugo± identykatora Sªowa kluczowe
Nazwy Identykatory poprawne skªadniowo Identykatory poprawne skªadniowo Dopuszczalne znaki Istotna wielko± liter Pierwszy znak Dªugo± identykatora Sªowa kluczowe
Nazwy Identykatory poprawne skªadniowo Identykatory poprawne skªadniowo Dopuszczalne znaki Istotna wielko± liter Pierwszy znak Dªugo± identykatora Sªowa kluczowe
Nazwy Identykatory poprawne skªadniowo Identykatory poprawne skªadniowo Dopuszczalne znaki Istotna wielko± liter Pierwszy znak Dªugo± identykatora Sªowa kluczowe
Nazwy Identykatory poprawne skªadniowo Identykatory poprawne skªadniowo Dopuszczalne znaki Istotna wielko± liter Pierwszy znak Dªugo± identykatora Sªowa kluczowe
Nazwy Identykatory poprawne skªadniowo Identykatory poprawne skªadniowo Dopuszczalne znaki Istotna wielko± liter Pierwszy znak Dªugo± identykatora Sªowa kluczowe
Nazwy Identykatory poprawne skªadniowo Sªowa kluczowe tabela
Nazwy Konwencja nazewnicza rmy Sun Konwencja nazewnicza rmy Sun Java Code Convention, September 12, 1997 http://www.oracle.com/technetwork/java/codeconv-138413.html
Nazwy Konwencja nazewnicza rmy Sun Konwencja nazewnicza rmy Sun Klasy i interfejsy Metody Zmienne Staªe
Nazwy Konwencja nazewnicza rmy Sun Konwencja nazewnicza rmy Sun Klasy i interfejsy Metody Zmienne Staªe
Nazwy Konwencja nazewnicza rmy Sun Konwencja nazewnicza rmy Sun Klasy i interfejsy Metody Zmienne Staªe
Nazwy Konwencja nazewnicza rmy Sun Konwencja nazewnicza rmy Sun Klasy i interfejsy Metody Zmienne Staªe
Nazwy Konwencja nazewnicza rmy Sun Konwencja nazewnicza rmy Sun Klasy i interfejsy Metody Zmienne Staªe
Nazwy Konwencja nazewnicza JavaBean Konwencja nazewnicza JavaBean Co to jest JavaBean?
Nazwy Konwencja nazewnicza JavaBean Konwencja nazewnicza wªasno±ci (ang. property) JavaBean Gettery Settery
Nazwy Konwencja nazewnicza JavaBean Konwencja nazewnicza wªasno±ci (ang. property) JavaBean Gettery Settery
Nazwy Konwencja nazewnicza JavaBean Konwencja nazewnicza wªasno±ci (ang. property) JavaBean Gettery Settery
Nazwy Konwencja nazewnicza JavaBean Konwencja nazewnicza (ang. listener) JavaBean rejestrowanie listenera (add) wyrejestrowanie listenera (remove) wspólne: ko«cówka to Listener
Nazwy Konwencja nazewnicza JavaBean Konwencja nazewnicza (ang. listener) JavaBean rejestrowanie listenera (add) wyrejestrowanie listenera (remove) wspólne: ko«cówka to Listener
Nazwy Konwencja nazewnicza JavaBean Konwencja nazewnicza (ang. listener) JavaBean rejestrowanie listenera (add) wyrejestrowanie listenera (remove) wspólne: ko«cówka to Listener
Nazwy Konwencja nazewnicza JavaBean Konwencja nazewnicza (ang. listener) JavaBean rejestrowanie listenera (add) wyrejestrowanie listenera (remove) wspólne: ko«cówka to Listener
Deklarowanie klas Wiadomo±ci ogólne Wiadomo±ci ogólne Wpªyw komentarzy Tylko jedna klasa publiczna w pliku ¹ródªowym (nie ma limitu na klasy niepubliczne). Class name and le name matching rule (tylko gdy istnieje klasa publiczna). Umiejscowienie sªowa kluczowego package w klasie. Umiejscowienie sªowa kluczowego import w klasie. Globalne dziaªanie package i import w stosunku do klas umieszczonych w tym samym pliku.
Deklarowanie klas Wiadomo±ci ogólne Wiadomo±ci ogólne Wpªyw komentarzy Tylko jedna klasa publiczna w pliku ¹ródªowym (nie ma limitu na klasy niepubliczne). Class name and le name matching rule (tylko gdy istnieje klasa publiczna). Umiejscowienie sªowa kluczowego package w klasie. Umiejscowienie sªowa kluczowego import w klasie. Globalne dziaªanie package i import w stosunku do klas umieszczonych w tym samym pliku.
Deklarowanie klas Wiadomo±ci ogólne Wiadomo±ci ogólne Wpªyw komentarzy Tylko jedna klasa publiczna w pliku ¹ródªowym (nie ma limitu na klasy niepubliczne). Class name and le name matching rule (tylko gdy istnieje klasa publiczna). Umiejscowienie sªowa kluczowego package w klasie. Umiejscowienie sªowa kluczowego import w klasie. Globalne dziaªanie package i import w stosunku do klas umieszczonych w tym samym pliku.
Deklarowanie klas Wiadomo±ci ogólne Wiadomo±ci ogólne Wpªyw komentarzy Tylko jedna klasa publiczna w pliku ¹ródªowym (nie ma limitu na klasy niepubliczne). Class name and le name matching rule (tylko gdy istnieje klasa publiczna). Umiejscowienie sªowa kluczowego package w klasie. Umiejscowienie sªowa kluczowego import w klasie. Globalne dziaªanie package i import w stosunku do klas umieszczonych w tym samym pliku.
Deklarowanie klas Wiadomo±ci ogólne Wiadomo±ci ogólne Wpªyw komentarzy Tylko jedna klasa publiczna w pliku ¹ródªowym (nie ma limitu na klasy niepubliczne). Class name and le name matching rule (tylko gdy istnieje klasa publiczna). Umiejscowienie sªowa kluczowego package w klasie. Umiejscowienie sªowa kluczowego import w klasie. Globalne dziaªanie package i import w stosunku do klas umieszczonych w tym samym pliku.
Deklarowanie klas Wiadomo±ci ogólne Wiadomo±ci ogólne Wpªyw komentarzy Tylko jedna klasa publiczna w pliku ¹ródªowym (nie ma limitu na klasy niepubliczne). Class name and le name matching rule (tylko gdy istnieje klasa publiczna). Umiejscowienie sªowa kluczowego package w klasie. Umiejscowienie sªowa kluczowego import w klasie. Globalne dziaªanie package i import w stosunku do klas umieszczonych w tym samym pliku.
Deklarowanie klas Wiadomo±ci ogólne Wiadomo±ci ogólne Wpªyw komentarzy Tylko jedna klasa publiczna w pliku ¹ródªowym (nie ma limitu na klasy niepubliczne). Class name and le name matching rule (tylko gdy istnieje klasa publiczna). Umiejscowienie sªowa kluczowego package w klasie. Umiejscowienie sªowa kluczowego import w klasie. Globalne dziaªanie package i import w stosunku do klas umieszczonych w tym samym pliku.
Deklarowanie klas Najprostsza deklaracja klasy c l a s s myclass { Modykatory Modykatory dost pu: public, protected, private. Inne modykatory: final, abstract, strictfp
Deklarowanie klas Najprostsza deklaracja klasy c l a s s myclass { Modykatory Modykatory dost pu: public, protected, private. Inne modykatory: final, abstract, strictfp
Deklarowanie klas Najprostsza deklaracja klasy c l a s s myclass { Modykatory Modykatory dost pu: public, protected, private. Inne modykatory: final, abstract, strictfp
Deklarowanie klas Najprostsza deklaracja klasy c l a s s myclass { Modykatory Modykatory dost pu: public, protected, private. Inne modykatory: final, abstract, strictfp
Deklarowanie klas Modykatory dost pu Modykatory dost pu Cho mamy trzy modykatory dost pu (public, protected, private), to w Javie mamy cztery poziomy kontroli (ang. level or access control) czwarty nazywany jest domy±lnym (ang. default access level) lub pakietowym (ang. package access level). W stosunku do klas u»ywamy albo dost pu domy±lnego, albo public.
Deklarowanie klas Modykatory dost pu Co rozumiemy pod poj ciem: dost p do klasy? Powiemy,»e klasa A ma dost p do klasy B je±li klasa A mo»e wykona jedn z nast puj cych czynno±ci Utworzy instancj klasy B. Rozszerzy klas B. U»ywa metod i zmiennych klasy B (zale»nie od ich modykatorów dost pu).
Deklarowanie klas Modykatory dost pu Co rozumiemy pod poj ciem: dost p do klasy? Powiemy,»e klasa A ma dost p do klasy B je±li klasa A mo»e wykona jedn z nast puj cych czynno±ci Utworzy instancj klasy B. Rozszerzy klas B. U»ywa metod i zmiennych klasy B (zale»nie od ich modykatorów dost pu).
Deklarowanie klas Modykatory dost pu Co rozumiemy pod poj ciem: dost p do klasy? Powiemy,»e klasa A ma dost p do klasy B je±li klasa A mo»e wykona jedn z nast puj cych czynno±ci Utworzy instancj klasy B. Rozszerzy klas B. U»ywa metod i zmiennych klasy B (zale»nie od ich modykatorów dost pu).
Deklarowanie klas Modykatory dost pu Co rozumiemy pod poj ciem: dost p do klasy? Powiemy,»e klasa A ma dost p do klasy B je±li klasa A mo»e wykona jedn z nast puj cych czynno±ci Utworzy instancj klasy B. Rozszerzy klas B. U»ywa metod i zmiennych klasy B (zale»nie od ich modykatorów dost pu).
Deklarowanie klas Domy±lny poziom kontroli package p a k i e t 1 ; c l a s s K l a s a { Listing 1: Plik Klasa.java Listing 2: Plik KlasaLepsza.java package p a k i e t 2 ; import p a k i e t 1. K l a s a ; c l a s s K l a s a L e p s z a extends K l a s a { Wynik próby uruchomienia Can't access class pakiet1.klasa. Class or interface must be public, in same package, or an accessible member class. import pakiet1.klasa;
Deklarowanie klas Publiczny poziom kontroli package p a k i e t 1 ; p u b l i c c l a s s K l a s a { Teraz mo»na napisa Listing 3: Plik Klasa.java Listing 4: Plik KlasaLepsza.java package p a k i e t 2 ; import p a k i e t 1. K l a s a ; c l a s s K l a s a L e p s z a extends K l a s a {
final Deklarowanie klas Inne modykatory
abstract Deklarowanie klas Inne modykatory
strictfp Deklarowanie klas Inne modykatory
Deklarowanie interfejsów Czym jest interfejs? Czym jest interfejs? Interfejs jest pewnego rodzaju umow okre±laj c co klasa mo»e robi, bez okre±lania w jaki sposób to robi.
Deklarowanie interfejsów Czym jest interfejs? O interfejsie mo»na my±le jak o 100% abstakcyjnej klasie. W konsekwencji metody interfejsu z denicji s publiczne i abstrakcyjne wi c nie musimy tego pisa : p u b l i c a b s t r a c t void i n t e r f a c e M e t h o d ( ) ; zwykle zapisujemy jako void i n t e r f a c e M e t h o d ( ) ;
Deklarowanie interfejsów Pozostaªe cechy interfejsów Pozostaªe cechy interfejsów Interfejs deklarujemy za pomoc sªowa kluczowego interface. Wszystkie zmienne interfejsu musz by publiczne, statyczne i zadeklarowane jako final inymi sªowy, w interfejsie mo»na tworzy tylko staªe. Konsekwencja tego jest taka jak dla metod: poniewa» zmienna musz by takie, wiec nie trzeba tego pisa. Interfejs nie mo»e posiada modykatora static. Poniewa» metody interfejsu s abstrakcyjne, wi c nie mog by final, strictfp, native. Interfejsc mo»e tylko rozszerza jeden lub wi cej interfejsów. Interfejs nie mo»e implementowa innego interfejsu lub klasy.
Deklarowanie interfejsów Pozostaªe cechy interfejsów Pozostaªe cechy interfejsów Interfejs deklarujemy za pomoc sªowa kluczowego interface. Wszystkie zmienne interfejsu musz by publiczne, statyczne i zadeklarowane jako final inymi sªowy, w interfejsie mo»na tworzy tylko staªe. Konsekwencja tego jest taka jak dla metod: poniewa» zmienna musz by takie, wiec nie trzeba tego pisa. Interfejs nie mo»e posiada modykatora static. Poniewa» metody interfejsu s abstrakcyjne, wi c nie mog by final, strictfp, native. Interfejsc mo»e tylko rozszerza jeden lub wi cej interfejsów. Interfejs nie mo»e implementowa innego interfejsu lub klasy.
Deklarowanie interfejsów Pozostaªe cechy interfejsów Pozostaªe cechy interfejsów Interfejs deklarujemy za pomoc sªowa kluczowego interface. Wszystkie zmienne interfejsu musz by publiczne, statyczne i zadeklarowane jako final inymi sªowy, w interfejsie mo»na tworzy tylko staªe. Konsekwencja tego jest taka jak dla metod: poniewa» zmienna musz by takie, wiec nie trzeba tego pisa. Interfejs nie mo»e posiada modykatora static. Poniewa» metody interfejsu s abstrakcyjne, wi c nie mog by final, strictfp, native. Interfejsc mo»e tylko rozszerza jeden lub wi cej interfejsów. Interfejs nie mo»e implementowa innego interfejsu lub klasy.
Deklarowanie interfejsów Pozostaªe cechy interfejsów Pozostaªe cechy interfejsów Interfejs deklarujemy za pomoc sªowa kluczowego interface. Wszystkie zmienne interfejsu musz by publiczne, statyczne i zadeklarowane jako final inymi sªowy, w interfejsie mo»na tworzy tylko staªe. Konsekwencja tego jest taka jak dla metod: poniewa» zmienna musz by takie, wiec nie trzeba tego pisa. Interfejs nie mo»e posiada modykatora static. Poniewa» metody interfejsu s abstrakcyjne, wi c nie mog by final, strictfp, native. Interfejsc mo»e tylko rozszerza jeden lub wi cej interfejsów. Interfejs nie mo»e implementowa innego interfejsu lub klasy.
Deklarowanie interfejsów Pozostaªe cechy interfejsów Pozostaªe cechy interfejsów Interfejs deklarujemy za pomoc sªowa kluczowego interface. Wszystkie zmienne interfejsu musz by publiczne, statyczne i zadeklarowane jako final inymi sªowy, w interfejsie mo»na tworzy tylko staªe. Konsekwencja tego jest taka jak dla metod: poniewa» zmienna musz by takie, wiec nie trzeba tego pisa. Interfejs nie mo»e posiada modykatora static. Poniewa» metody interfejsu s abstrakcyjne, wi c nie mog by final, strictfp, native. Interfejsc mo»e tylko rozszerza jeden lub wi cej interfejsów. Interfejs nie mo»e implementowa innego interfejsu lub klasy.
Deklarowanie interfejsów Pozostaªe cechy interfejsów Pozostaªe cechy interfejsów Interfejs deklarujemy za pomoc sªowa kluczowego interface. Wszystkie zmienne interfejsu musz by publiczne, statyczne i zadeklarowane jako final inymi sªowy, w interfejsie mo»na tworzy tylko staªe. Konsekwencja tego jest taka jak dla metod: poniewa» zmienna musz by takie, wiec nie trzeba tego pisa. Interfejs nie mo»e posiada modykatora static. Poniewa» metody interfejsu s abstrakcyjne, wi c nie mog by final, strictfp, native. Interfejsc mo»e tylko rozszerza jeden lub wi cej interfejsów. Interfejs nie mo»e implementowa innego interfejsu lub klasy.
Deklarowanie interfejsów Pozostaªe cechy interfejsów Pozostaªe cechy interfejsów Interfejs deklarujemy za pomoc sªowa kluczowego interface. Wszystkie zmienne interfejsu musz by publiczne, statyczne i zadeklarowane jako final inymi sªowy, w interfejsie mo»na tworzy tylko staªe. Konsekwencja tego jest taka jak dla metod: poniewa» zmienna musz by takie, wiec nie trzeba tego pisa. Interfejs nie mo»e posiada modykatora static. Poniewa» metody interfejsu s abstrakcyjne, wi c nie mog by final, strictfp, native. Interfejsc mo»e tylko rozszerza jeden lub wi cej interfejsów. Interfejs nie mo»e implementowa innego interfejsu lub klasy.
Deklarowanie skªadowych klasy Modykatory Modykatory dost pu Podczas gdy klasa mo»e u»ywa tylko dwóch modykatorów dost pu, tj. domy±lnego lub public, skªadowe klasy (czyli metody i zmienne) mog u»ywa wszystkich czterech modykatorów, tj. public, protected, private oraz domy±lny.
Deklarowanie skªadowych klasy Modykatory Modykator public Dost p maj wszyscy, bez wzgl du na pakiet w jakim si znajduj (zakªadaj c,»e modykatory klas na to pozwalaj ).
Deklarowanie skªadowych klasy Modykator public (odwoªania do skªadowych) package book ; import c e r t. ; c l a s s Goo { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { S ludge o = new S ludge ( ) ; o. t e s t I t ( ) ; package c e r t ; p u b l i c c l a s s S ludge { p u b l i c void t e s t I t ( ) { System. out. p r i n t l n ( " s l u d g e " ) ;
Deklarowanie skªadowych klasy Modykator public (wpªyw na dziedziczenie) package c e r t ; p u b l i c c l a s s Roo { p u b l i c S t r i n g doroothings ( ) { // i m a g i n e t h e fun code t h a t goes h e r e r e t u r n " fun " ; package n o t c e r t ; import c e r t. Roo ; c l a s s Cloo extends Roo { p u b l i c void t e s t C l o o ( ) { System. out. p r i n t l n ( doroothings ( ) ) ; // cdn
Deklarowanie skªadowych klasy Modykator public (wpªyw na dziedziczenie) // cd c l a s s Toon { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { Cloo c = new Cloo ( ) ; System. out. p r i n t l n ( c. doroothings ( ) ) ; //No problem ; method i s p u b l i c
Deklarowanie skªadowych klasy Modykatory Modykator private Skªadowe prywatne s przeciwie«stwem skªadowych publicznych dos p do nich ma tylko klasa, w której zostaªy zadeklarowane.
Deklarowanie skªadowych klasy Modykator private (odwoªania do skªadowych 1/2) package c e r t ; p u b l i c c l a s s Roo { p r i v a t e S t r i n g doroothings ( ) { // i m a g i n e t h e fun code t h a t goes here, // but o n l y t h e Roo c l a s s knows r e t u r n " fun " ; package n o t c e r t ; import c e r t. Roo ; c l a s s UseARoo { p u b l i c void t e s t I t ( ) { Roo r = new Roo ( ) ; // So f a r so good ; // c l a s s Roo i s p u b l i c System. out. p r i n t l n ( r. doroothings ( ) ) ; // C o m p i l e r e r r o r!
Deklarowanie skªadowych klasy Modykator private (odwoªania do skªadowych 2/2) cannot find symbol symbol : method doroothings()
Deklarowanie skªadowych klasy Modykator private (wpªyw na dziedziczenie 1/2) package c e r t ; p u b l i c c l a s s Roo { p r i v a t e S t r i n g doroothings ( ) { // i m a g i n e t h e fun code t h a t goes here, // but no o t h e r c l a s s w i l l know r e t u r n " fun " ; package c e r t ; // Cloo and Roo a r e i n t h e same package c l a s s Cloo extends Roo {// S t i l l OK, s u p e r c l a s s Roo i s p u b l i c p u b l i c void t e s t C l o o ( ) { System. out. p r i n t l n ( doroothings ( ) ) ; // C o m p i l e r e r r o r!
Deklarowanie skªadowych klasy Modykator private (wpªyw na dziedziczenie 2/2) %javac Cloo.java Cloo.java:4: Undefined method: doroothings() System.out.println(doRooThings()); 1 error
Deklarowanie skªadowych klasy Modykatory Modykator protected W przypadku modykatora protected do skªadowej maj dost p wszystkie klasy potomne (nawet te z innych pakietów) oraz klasy z danego pakietu.
Deklarowanie skªadowych klasy Modykator protected (odwoªania do skªadowych 1/2) package c e r t i f i c a t i o n ; p u b l i c c l a s s O t h e r C l a s s { void t e s t I t ( ) { // No m o d i f i e r means method has d e f a u l t // a c c e s s System. out. p r i n t l n ( " O t h e r C l a s s " ) ; package s o m e t h i n g E l s e ; import c e r t i f i c a t i o n. O t h e r C l a s s ; c l a s s A c c e s s C l a s s { s t a t i c p u b l i c void main ( S t r i n g [ ] a r g s ) { O t h e r C l a s s o = new O t h e r C l a s s ( ) ; o. t e s t I t ( ) ;
Deklarowanie skªadowych klasy Modykator protected (odwoªania do skªadowych 2/2) No method matching testit() found in class certification.otherclass. o.testit();
Deklarowanie skªadowych klasy Modykator protected (odwoªania do skªadowych) package c e r t i f i c a t i o n ; p u b l i c c l a s s Parent { protected i n t x = 9 ; // p r o t e c t e d a c c e s s package o t h e r ; // D i f f e r e n t package import c e r t i f i c a t i o n. Parent ; c l a s s C h i l d extends Parent { p u b l i c void t e s t I t ( ) { System. out. p r i n t l n ( " x i s " + x ) ; // No problem ; C h i l d // i n h e r i t s x
Deklarowanie skªadowych klasy Modykator protected (odwoªania do skªadowych 1/2) package c e r t i f i c a t i o n ; p u b l i c c l a s s Parent { protected i n t x = 9 ; // p r o t e c t e d a c c e s s package o t h e r ; import c e r t i f i c a t i o n. Parent ; c l a s s C h i l d extends Parent { p u b l i c void t e s t I t ( ) { System. out. p r i n t l n ( " x i s " + x ) ; // No problem ; // C h i l d i n h e r i t s x Parent p = new Parent ( ) ; // Can we a c c e s s x u s i n g t h e // p r e f e r e n c e? System. out. p r i n t l n ( "X i n p a r e n t i s " + p. x ) ; // C o m p i l e r e r r o r!
Deklarowanie skªadowych klasy Modykator protected (odwoªania do skªadowych 2/2) %javac -d. other/child.java other/child.java:9: x has protected access in certification.parent System.out.println("X in parent is " + p.x); ^ 1 error
Deklarowanie skªadowych klasy Modykatory Modykator domy±lny W przypadku domy±lnego poziomu dost pu do skªadowej maj dost p klasy z tego samego pakietu.
Deklarowanie skªadowych klasy Modykator protected (odwoªania do skªadowych 1/2) package c e r t i f i c a t i o n ; p u b l i c c l a s s O t h e r C l a s s { void t e s t I t ( ) { // No m o d i f i e r means method has d e f a u l t // a c c e s s System. out. p r i n t l n ( " O t h e r C l a s s " ) ; package o t h e r ; // D i f f e r e n t package import c e r t i f i c a t i o n. Parent ; c l a s s C h i l d extends Parent { p u b l i c void t e s t I t ( ) { System. out. p r i n t l n ( " x i s " + x ) ;
Deklarowanie skªadowych klasy Modykator protected (odwoªania do skªadowych 2/2) Child.java:4: Undefined variable: x System.out.println("Variable x is " + x); 1 error
Deklarowanie skªadowych klasy Modykator protected (odwoªania do skªadowych) package c e r t i f i c a t i o n ; p u b l i c c l a s s Parent { i n t x = 9 ; // d e f a u l t a c c e s s package c e r t i f i c a t i o n ; c l a s s C h i l d extends Parent { s t a t i c p u b l i c void main ( S t r i n g [ ] a r g s ) { C h i l d s c = new C h i l d ( ) ; s c. t e s t I t ( ) ; p u b l i c void t e s t I t ( ) { System. out. p r i n t l n ( " V a r i a b l e x i s " + x ) ; problem ; // No
Deklarowanie zmiennych lokalnych Modykator protected (odwoªania do skªadowych) Poni»szy zapis nie jest poprawny c l a s s Foo { void d o S t u f f ( ) { p r i v a t e i n t x = 7 ; t h i s. domore ( x ) ; Jedyny modykator jaki mo»na zastosowa do zmiennych lokalnych to final.
Deklarowanie skªadowych klasy Modykatory Modykatory dost pu podsumowanie Widoczno± public protected private domy±lny Ta sama klasa Inna klasa z tego samego pakietu Podklasa z tego samego pakietu Podklasa z innego pakietu Klasa z innego pakietu
Deklarowanie skªadowych klasy Inne modykatory Inne modykatory dost pu final, abstract, synchronized, native, strictfp
Deklarowanie skªadowych klasy Modykatory Modykator final Zabezpiecza metod przed jej przesªoni ciem w klasie potomnej (ang. override)
Deklarowanie skªadowych klasy Modykator final (w przypadku metody) c l a s s S u p e r C l a s s { p u b l i c f i n a l void showsample ( ) { System. out. p r i n t l n ( "One t h i n g. " ) ; c l a s s S u b C l a s s extends S u p e r C l a s s { p u b l i c void showsample ( ) { // Try to o v e r r i d e t h e f i n a l // s u p e r c l a s s method System. out. p r i n t l n ( " Another t h i n g. " ) ;
Deklarowanie skªadowych klasy Modykator final (w przypadku metody) %javac FinalTest.java FinalTest.java:5: The method void showsample() declared in class SubClass cannot override the final method of the same signature declared in class SuperClass. Final methods cannot be overridden. public void showsample() { 1 error
Deklarowanie skªadowych klasy Modykator final (w przypadku argumentu) p u b l i c Record g e t R e c o r d ( i n t f i l e N u m b e r, i n t recnumber ) { p u b l i c Record g e t R e c o r d ( i n t f i l e N u m b e r, f i n a l i n t recordnumber ) {
Deklarowanie skªadowych klasy Modykatory Modykator abstract Metoda abstrakcyjna to metoda, która zostaªa zadeklarowana, ale nie zostaªa zaimplementowana.
Deklarowanie skªadowych klasy Modykator abstract (w przypadku metody) p u b l i c c l a s s I l l e g a l C l a s s { // i l l e g a l i f c l a s s i s not a b s t r a c t p u b l i c a b s t r a c t void d o I t ( ) ; IllegalClass.java:1: class IllegalClass must be declared abstract. It does not define void doit() from class IllegalClass. public class IllegalClass{ 1 error
Deklarowanie skªadowych klasy Modykator abstract (w przypadku metody) O ile nie mo»e by niebastrakcyjnej klasy z metodami abstrakcyjymi to mo»e by abstrakcyjna klasa z (tylko) metodami nieabstrakcyjnymi. p u b l i c a b s t r a c t c l a s s L e g a l C l a s s { void goodmethod ( ) { // l o t s o f r e a l i m p l e m e n t a t i o n code h e r e
Modykator abstract (w przypadku metody) Pytanie: ile metod jest w klasie Mini Deklarowanie skªadowych klasy p u b l i c a b s t r a c t c l a s s V e h i c l e { p r i v a t e S t r i n g t y p e ; p u b l i c a b s t r a c t void g o U p H i l l ( ) ; // A b s t r a c t method p u b l i c S t r i n g gettype ( ) { // Non a b s t r a c t method r e t u r n t y p e ; p u b l i c a b s t r a c t c l a s s Car extends V e h i c l e { p u b l i c a b s t r a c t void g o U p H i l l ( ) ; // S t i l l a b s t r a c t p u b l i c void docarthings ( ) { // s p e c i a l c a r code goes h e r e p u b l i c c l a s s Mini extends Car { p u b l i c void g o U p H i l l ( ) { // Mini s p e c i f i c g o i n g u p h i l l code
Deklarowanie skªadowych klasy Modykator abstract (w przypadku metody) Pytanie: czy ten kod si skompiluje? p u b l i c a b s t r a c t c l a s s A { a b s t r a c t void f o o ( ) ; c l a s s B extends A { void f o o ( i n t I ) { To jest przykªad na przeªadowanie (przeci»enie) (ang. overload). Klasa B nie zawiera w sobie implementacji metody foo.
Deklarowanie skªadowych klasy Modykator abstract (w przypadku metody) Pytanie: czy ten kod si skompiluje? p u b l i c a b s t r a c t c l a s s A { a b s t r a c t void f o o ( ) ; c l a s s B extends A { void f o o ( i n t I ) { To jest przykªad na przeªadowanie (przeci»enie) (ang. overload). Klasa B nie zawiera w sobie implementacji metody foo.
Deklarowanie skªadowych klasy Modykator abstract (w przypadku metody) abstract + static = illegal a b s t r a c t s t a t i c void d o S t u f f ( ) ; MyClass.java:2: illegal combination of modifiers: abstract and static abstract static void dostuff();
Deklarowanie skªadowych klasy Modykator synchronized synchronized oznacza,»e metoda nie mo»e by wywoªana przez wi cej ni» jeden w tek w tym samym czasie. p u b l i c synchronized Record r e t r i e v e U s e r I n f o ( i n t i d ) { Modykator ten dotyczy tylko metod (nie zmiennych, nie klas).
Deklarowanie skªadowych klasy Modykatory Modykator native, strictfp Modykator native oznacza,»e metoda (i tylko metoda) zaimplementowana zostaªa w sposób zale»ny platformowo, np. w j zyku C. Ciaªo takiej metody zast pujemy znakiem ±rednika (podobnie jak ciaªo metody abstrakcyjnej).
Deklarowanie skªadowych klasy Deklarowanie metod ze zmienn list argumentów L e g a l : void d o S t u f f ( i n t... x ) { // e x p e c t s from 0 to many i n t s // as p a r a m e t e r s void d o S t u f f 2 ( char c, i n t... x ) { // e x p e c t s f i r s t a char, // then 0 to many i n t s void d o S t u f f 3 ( Animal... a n i m a l ) { // 0 to many Animals I l l e g a l : void d o S t u f f 4 ( i n t x... ) { // bad s y n t a x void d o S t u f f 5 ( i n t... x, char... y ) { // too many var a r g s void d o S t u f f 6 ( S t r i n g... s, byte b ) { // var a r g must be l a s t
Deklarowanie skªadowych klasy Konstruktor c l a s s Foo { protected Foo ( ) { // t h i s i s Foo ' s c o n s t r u c t o r protected void Foo ( ) { // t h i s i s a b a d l y named, // but l e g a l, method Konstruktor Konstruktor nie mo»e by poprzedzony modykatorem static, final ani abstract.
Deklarowanie skªadowych klasy Konstruktor c l a s s Foo { protected Foo ( ) { // t h i s i s Foo ' s c o n s t r u c t o r protected void Foo ( ) { // t h i s i s a b a d l y named, // but l e g a l, method Konstruktor Konstruktor nie mo»e by poprzedzony modykatorem static, final ani abstract.
Deklarowanie skªadowych klasy Konstruktor c l a s s Foo2 { // l e g a l c o n s t r u c t o r s Foo2 ( ) { p r i v a t e Foo2 ( byte b ) { Foo2 ( i n t x ) { Foo2 ( i n t x, i n t... y ) {
Deklarowanie skªadowych klasy Konstruktor c l a s s Foo2 { // i l l e g a l c o n s t r u c t o r s void Foo2 ( ) { // i t ' s a method, not a c o n s t r u c t o r Foo ( ) { // not a method o r a c o n s t r u c t o r Foo2 ( short s ) ; // l o o k s l i k e an a b s t r a c t method s t a t i c Foo2 ( f l o a t f ) { // can ' t be s t a t i c f i n a l Foo2 ( long x ) { // can ' t be f i n a l a b s t r a c t Foo2 ( char c ) { // can ' t be a b s t r a c t Foo2 ( i n t... x, i n t t ) { // bad var a r g s y n t a x
Deklarowanie skªadowych klasy Zmienne W Javie mamy dwa rodzaje zmiennych Zmienne proste char, boolean, byte, short, int, long, float, double byte b ; boolean m y B o o l e a n P r i m i t i v e ; i n t x, y, z ; Zmienne referencyjne czyli zmienne u»ywane w stosunku do obiektów. Zmienna referencyjna pozwala na uzyskanie dost pu do obiektów typu takiego jak zmienna referencyjna lub b d cych podtypem zaeklarowanego typu. O b ject o ; Dog mynewdogreferencevariable ; S t r i n g s1, s2, s3 ;
Deklarowanie skªadowych klasy Zmienne instancyjne c l a s s Employee { // d e f i n e f i e l d s ( i n s t a n c e v a r i a b l e s ) f o r employee i n s t a n c e s p r i v a t e S t r i n g name ; p r i v a t e S t r i n g t i t l e, p r i v a t e S t r i n g manager ; // o t h e r code goes h e r e i n c l u d i n g a c c e s s methods f o r p r i v a t e // f i e l d s
Deklarowanie skªadowych klasy Zmienne lokalne c l a s s T e s t S e r v e r { p u b l i c void l o g I n ( ) { i n t count = 1 0 ;
Deklarowanie skªadowych klasy Zmienne lokalne c l a s s T e s t S e r v e r { p u b l i c void l o g I n ( ) { i n t count = 1 0 ; p u b l i c void dosomething ( i n t i ) { count = i ; // Won ' t c o m p i l e! Can ' t a c c e s s count o u t s i d e // method l o g I n ( )
Deklarowanie skªadowych klasy Zmienne instancyjne i lokalne (shadowing) c l a s s T e s t S e r v e r { i n t count = 9 ; // D e c l a r e an i n s t a n c e v a r i a b l e named count p u b l i c void l o g I n ( ) { i n t count = 1 0 ; // D e c l a r e a l o c a l v a r i a b l e named count System. out. p r i n t l n ( " l o c a l v a r i a b l e count i s "+count ) ; p u b l i c void count ( ) { System. out. p r i n t l n ( " i n s t a n c e v a r i a b l e count i s " + count ) ; p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { new T e s t S e r v e r ( ). l o g I n ( ) ; new T e s t S e r v e r ( ). count ( ) ;
Deklarowanie skªadowych klasy Zmienne instancyjne i lokalne (shadwing) i l l e g a l c l a s s Foo { i n t s i z e = 2 7 ; p u b l i c void s e t S i z e ( i n t s i z e ) { s i z e = s i z e ; //??? which s i z e e q u a l s which s i z e??? l e g a l : c l a s s Foo { i n t s i z e = 2 7 ; p u b l i c void s e t S i z e ( i n t s i z e ) { t h i s. s i z e = s i z e ; // t h i s. s i z e means t h e c u r r e n t o b j e c t ' s // i n s t a n c e v a r i a b l e, s i z e. The s i z e // on t h e r i g h t i s t h e p a r a m e t e r
Deklarowanie skªadowych klasy Tablice D e c l a r i n g an Array o f P r i m i t i v e s i n t [ ] key ; // Recommended i n t key [ ] ; // L e g a l but l e s s r e a d a b l e D e c l a r i n g an Array o f O b ject R e f e r e n c e s Thread [ ] t h r e a d s ; // Recommended Thread t h r e a d s [ ] ; // L e g a l but l e s s r e a d a b l e S t r i n g [ ] [ ] [ ] occupantname ; S t r i n g [ ] managername [ ] ; // L e g a l but not recommended
Deklarowanie skªadowych klasy Zmienne Statyczne zmienne i metody Modykator static wykorzysywany jest do utworzenia zmiennych i metod stniej cych niezale»nie od jakichkolwiek obiektów danej klasy.
Deklarowanie skªadowych klasy Typ wyliczeniowy (enum) enum C o f f e e S i z e { BIG, HUGE, OVERWHELMING ; C o f f e e S i z e c s = C o f f e e S i z e. BIG ;
Deklarowanie skªadowych klasy Typ wyliczeniowy (enum) na zewn trz klasy // t h i s cannot be p r i v a t e o r p r o t e c t e d enum C o f f e e S i z e { BIG, HUGE, OVERWHELMING c l a s s C o f f e e { C o f f e e S i z e s i z e ; p u b l i c c l a s s C o f f e e T e s t 1 { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { C o f f e e d r i n k = new C o f f e e ( ) ; d r i n k. s i z e = C o f f e e S i z e. BIG ; // enum o u t s i d e c l a s s
Deklarowanie skªadowych klasy Typ wyliczeniowy (enum) wewn trz klasy c l a s s C o f f e e 2 { enum C o f f e e S i z e {BIG, HUGE, OVERWHELMING C o f f e e S i z e s i z e ; p u b l i c c l a s s C o f f e e T e s t 2 { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { C o f f e e 2 d r i n k = new C o f f e e 2 ( ) ; d r i n k. s i z e = C o f f e e 2. C o f f e e S i z e. BIG ; // e n c l o s i n g c l a s s // name r e q u i r e d
Deklarowanie skªadowych klasy Typ wyliczeniowy (enum) nie mo»e by deklarowany wewn trz metody p u b l i c c l a s s C o f f e e T e s t 1 { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { enum C o f f e e S i z e { BIG, HUGE, OVERWHELMING C o f f e e d r i n k = new C o f f e e ( ) ; d r i n k. s i z e = C o f f e e S i z e. BIG ; Opcjonaln ±rednik // s e m i c o l o n a t t h e end o f t h e enum d e c l a r a t i o n i s o p t i o n a l enum C o f f e e S i z e { BIG, HUGE, OVERWHELMING ;